package IOStream;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;

public class OOSDemo {
    public static void main(String[] args) throws IOException {
        Person person=new Person();
        person.setName("Samuel");
        person.setAge(18);
        List list=new ArrayList();
        list.add("他不喜欢学习");
        list.add("但是没办法");
        person.setOtherInfo(list);

        FileOutputStream fis=new FileOutputStream("Demo.txt");
        ObjectOutputStream oos=new ObjectOutputStream(fis);
        //这个类不实现序列化 方法会 报错  一个类要实现被对象流读写 必须实现
        //该对象将给定对象转成一组字节后写出，该字节比实际字节大  除了数据还有结构等信息

       /* 下面的代码实际上经历了 两个操作
         1.oos将person对象转成一组字节
         将一个对象转成字节的过程称为：对象序列化

         2.在通过fos将这个字节写入硬盘
         将改对象转换的字节写入硬盘做长久保存的过程称为：对象持久化

         这个过程就叫Java对象的持久化。而这个文件是以二进制的形式编写的，
         当你用文本编辑器将它打开，这些二进制代码与某个字符集映射之后，显示出来的东西就成了乱码。
         即使输出的是一个String的对象，也是以该String对象的二进制编码的形式输出，而不是输出String对象的内容
         */
        oos.writeObject(person);
        System.out.println("写出完毕");
        oos.close();


    }
}
